<template>
  <view class="page">
    <!-- 表单组件 -->
    <mes-form :mesForm="mesFormTop" ref="formTopRef"></mes-form>
    <!-- 扫码添加 -->
    <mes-choose-goods :top="top" type="receipt"></mes-choose-goods>
    <!-- 当手动添加商品时 -->
    <mes-goods
      :form="mesGoodsForm"
      @delete="delGoods"
      :showDel="true"
      @edit="editGoods"
    ></mes-goods>
    <!-- 备注 -->
    <mes-form :mesForm="remark"></mes-form>
    <!-- 重置 -->
    <mes-button :type="3" :form="buttonFrom"></mes-button>
  </view>
</template>

<script>
import mesGoods from '../../../components/mes/mes-goods.vue'
export default {
  components: { mesGoods },
  data() {
    return {
      clerkHasMore: true,
      clerkForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      chase_code_name: '',
      mesGoodsForm: {
        numberUnitField: 'unit_name', //数量单位
        priceField: 'unit_price' //单价
      },
      remark: {
        top: 20,
        row: {
          remark: ''
        },
        items: [
          {
            title: '备注',
            slots: {
              field: 'remark',
              type: 'input'
            }
          }
        ]
      },
      top: 20, //扫码添加
      mesFormTop: {
        top: 20,
        row: {
          purchase_time: this.$tools.getCurTime(1),
          code_type: '1',
          name: '加工单'
        },
        items: [
          {
            title: '单据编号',
            required: true,
            slots: {
              field: 'purchase_code',
              type: 'input'
              // icon: 'arrow',
              // select: {
              //   name: 'purchase_code',
              //   search: true,
              //   placeholder: '请输入关键词',
              //   options: [],
              //   searchEvent: (keyword) => {
              //     this.getPurchase(keyword)
              //   },
              //   changeEvent: (item) => {
              //     this.mesFormTop.row.purchase_id = item.id
              //     this.mesFormTop.row.purchase_code = item.purchase_code
              //   }
              // }
            },
            rules: [
              {
                type: 'required',
                message: '请输入单据编号'
              }
            ]
          },
          {
            title: '验收类型',
            required: true,
            slots: {
              field: 'name',
              type: 'select',
              icon: 'arrow',
              select: {
                search: false,
                options: [],
                changeEvent: (item) => {
                  this.mesFormTop.row.chase_code = ''
                  getApp().globalData.goods.list = []
                  this.mesFormTop.row.code_type = item.id
                  this.mesFormTop.row.name = item.name
                }
              }
            },
            rules: [
              {
                type: 'required',
                message: '请选择验收类型'
              }
            ]
          },
          {
            title: '加工单',
            required: true,
            slots: {
              field: 'chase_code',
              icon: 'arrow'
            },
            tap: () => {
              let obj = {
                code: this.mesFormTop.row.code_type
              }
              obj = JSON.stringify(obj)
              uni.navigateTo({ url: `/pages/home/receipt/choice?obj=${obj}` })
            },
            rules: [
              {
                type: 'required',
                message: '请选择加工单号'
              }
            ]
          },
          {
            title: '单据日期',
            required: true,
            slots: {
              field: 'purchase_time',
              type: 'date',
              icon: 'arrow'
            },
            rules: [
              {
                type: 'required',
                message: '请选择单据日期'
              }
            ]
          },
          {
            title: '验收人',
            slots: {
              field: 'work_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging()
                this.getClerk()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getClerk(keyword)
                  this.resetPaging()
                },
                scrolltoupper: () => {
                  if (this.clerkForm.page > 0) {
                    this.clerkForm.page--
                  }
                  this.getClerk()
                },
                scrolltolower: () => {
                  if (!this.clerkHasMore) return
                  this.clerkForm.page++
                  this.getClerk()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.work_id = item.id
                  this.mesFormTop.row.work_name = item.name
                }
              }
            }
          }
        ]
      },
      buttonFrom: {
        leftEvent: () => {
          this.delData()
        },
        leftText: '重置',
        rightEvent: () => {
          this.saveData()
        },
        rightText: '确定'
      }
    }
  },
  methods: {
    resetPaging() {
      this.clerkHasMore = true
      this.clerkForm.page = 1
      this.mesFormTop.items[4].slots.select.options = []
    },
    //获取商品
    getGoods() {
      if (this.mesFormTop.row.chase_code && this.mesFormTop.row.code_type) {
        this.$api.prod.acceptance
          .pickinfo({
            purchase_code: this.mesFormTop.row.chase_code,
            code_type: this.mesFormTop.row.code_type
          })
          .then((res) => {
            let info_list = []
            if (res.code == 200) {
              res.data.forEach((item) => {
                info_list.push({
                  id: item.id,
                  goods_id: item.goods_id, //商品id
                  unit: item.unit_id,
                  // 编辑商品用到的（提交参数）
                  // 商品编号（商品详情获取或者通用->商品价格接口获取）
                  goods_code: item.goods_code,
                  stores_name: item.stores_name,
                  need_number: item.need_number || '',
                  //  商品规格型号
                  goods_note: item.goods_note,
                  goods_attr: item.goods_attr ||null, // 商品属性ID(验证需要加)
                  attr_name:item.attr_name|| null,
                  auxiliary: item.goods_info.auxiliary, //属性状态
                  //  商品单位ID（资料->商品获取商品单位列表，用户选择）
                  goods_unit: item.unit_id,
                  stores_id: item.stores_id, //仓库ID
                  allow_stock: item.allow_stock, // 可用库存
                  //  数量（默认为1，用户修改）
                  number: item.number,
                  //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
                  default_unit: item.default_unit,
                  //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
                  basic_nmber: item.basic_nmber,
                  unit_price: item.purchase, //商品单价
                  all_money: item.money, //购货金额
                  remark: item.remark, //备注
                  batch_id: item.batch_id || null, //批次ID
                  batch_name: item.batch_name, //批次名称
                  manufacture:item.manufacture? item.manufacture*1000:'', // 生产日期
                  guarantee: item.guarantee, //保质期
                  validity: item.validity?item.validity *1000: '', //有效期至
                  serial: item.serial || null, //序列号数组
                  batch: item.goods_info.batch,//是否开启批次
                  serial_status: item.goods_info.serial, 
                  auxiliary: item.goods_info.auxiliary, //属性状态
                  purchase: item.purchase,
                  // 编辑商品用到的（展示参数）
                  default_unit_name: item.default_unit_name, //基本单位名称
                  // mes-goods显示中用到的
                  unit_name: item.unit_name, //数量单位
                  goods_image: item.goods_image, //图片
                  goods_name: item.goods_name, //商品名称
                  period_period:item.serial//序列号数组
                })
              })
              getApp().globalData.goods.list = info_list
            }
          })
      }
    },
    // 获取编号
    async getCode() {
      let code = await this.$tools.getCode(36)
      if (code) {
        this.mesFormTop.row.purchase_code = code
      }
    },
    //获取验收单
    getPurchase() {
      this.$api.prod.acceptance
        .index({
          page: -1
        })
        .then((res) => {
          if (res.code == 200) {
            this.mesFormTop.items.forEach((item) => {
              if (item.title === '单据编号') {
                item.slots.select.options = res.data.list
              }
            })
          }
        })
    },

    //获取职员
    getClerk(keyword) {
      this.clerkForm.keyword = keyword
      this.$api.source.staff_member
        .index(this.clerkForm)
        .then((res) => {
          if (res.code == 200) {
            this.clerkHasMore = res.data.list.length ? true : false
            this.mesFormTop.items.forEach((item) => {
              if (item.title === '验收人') {
                item.slots.select.options =[...item.slots.select.options,...res.data.list] 
              }
            })
          }
        })
    },
    //验收单类型
    getType() {
      let typeList = [
        {
          id: 1,
          name: '加工单'
        },
        {
          id: 2,
          name: '委外加工单'
        }
      ]
      this.mesFormTop.items.forEach((item) => {
        if (item.title === '验收类型') {
          item.slots.select.options = typeList
        }
      })
    },

    //删除商品
    delGoods(i) {
      getApp().globalData.goods.list.splice(i, 1)
    },
    //编辑商品
    editGoods(i) {
      let obj = {
        index: i,
        name: 'add'
      }
      obj = JSON.stringify(obj)
      uni.navigateTo({ url: `/pages/home/receipt/goods?obj=${obj}` })
    },
    //重置数据
    delData() {
      this.remark.row = {}
      this.mesFormTop.row = {}
      getApp().globalData.goods.list = []
      this.getCode() //获取有效编号
      ;(this.mesFormTop.row.code_type = '1'), (this.mesFormTop.row.name = '加工单')
      this.mesFormTop.row.purchase_time = this.$tools.getCurTime(1)
    },
    //保存数据
    saveData() {
      this.$refs.formTopRef.validate((valid) => {
        let postForm = {
          purchase_code: this.mesFormTop.row.purchase_code, //单据编号
          code_type: this.mesFormTop.row.code_type, //验收类型
          chase_code: this.mesFormTop.row.chase_code, //加工单
          purchase_time: this.mesFormTop.row.purchase_time, //单据日期
          work_id: this.mesFormTop.row.work_id || null, //验收人
          remark: this.remark.row.remark || null,
          info_list: []
        }
        let info_list = getApp().globalData.goods.list
        info_list.forEach((item) => {
          item.manufacture = item.manufacture? this.$tools.timeRub(item.manufacture):''
          item.validity = item.validity ?this.$tools.timeRub(item.validity):''
          postForm.info_list.push({
            // 编辑商品用到的（提交参数）
            // 商品编号（商品详情获取或者通用->商品价格接口获取）
            goods_code: item.goods_code,
            need_number: item.need_number || '', //生产数量
            goods_attr: item.goods_attr || null, //商品属性ID
            attr_name:item.attr_name|| null,
            //  商品规格型号
            goods_note: item.goods_note,
            //  商品单位ID（资料->商品获取商品单位列表，用户选择）
            goods_unit: item.goods_unit,
            stores_id: item.stores_id, //仓库ID
            allow_stock: item.allow_stock, // 可用库存
            //  数量（默认为1，用户修改）
            number: item.number,
            //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
            default_unit: item.default_unit,
            //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
            basic_nmber: item.basic_nmber,
            unit_price: item.unit_price, //商品单价
            purchase: item.purchase,
            all_money: item.all_money, //购货金额
            remark: item.remark, //备注
            batch_id: item.batch_id, //批次ID
            batch_name: item.batch_name, //批次名称
            manufacture: item.manufacture, // 生产日期
            guarantee: item.guarantee, //保质期
            validity: item.validity || '', //有效期至
            serial: item.serial || null, //序列号数组
            batch:item.batch,//是否开启批次
            auxiliary: item.auxiliary, //属性状态
            serial_status: item.serial_status,
            //  金额
            money: item.money,
            // 编辑商品用到的（展示参数）
            default_unit_name: item.default_unit_name, //基本单位名称
            // mes-goods显示中用到的
            unit_name: item.unit_name, //数量单位
            goods_image: item.goods_image, //图片
            goods_name: item.goods_name, //商品名称
            period_period:item.serial_status == 1 ?item.serial:''
          })
        })
    
        postForm.info_list = JSON.stringify(postForm.info_list)

        if (valid) {
          if (!info_list.length) {
            return this.$tools.toast('请选择商品')
          }
          this.$api.prod.acceptance.add(postForm).then((res) => {
            if (res.code == 200) {
              this.$tools.successBack(res.msg)
            }
          })
        }
      })
    }
  },
  onShow() {
    console.log(getApp().globalData.goods.list, '商品列表监听')
  },
  onLoad() {
    // this.getPurchase() //获取验收单据编号
    this.getClerk() //获取职员列表
    this.getType() //获取验收类型
    this.getCode() //获取有效编号
  }
}
</script>

<style lang="less" scoped>
</style>
